function mockQueryData(time = 3000,length=3,status =true) {
  let data = []
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      data = Array.from({length}, (_, index) => {
        return index + 1
      })
      status ? resolve(data) : reject(data)
    }, time)
  })
}

// mockQueryData().then(r es => {
//   console.log(res)
// }).catch(err => {
//   console.log(err)
// }).finally(() => {
//   console.log('finally')
// })

//类方法
// Promise.resolve('resolve').then(res => console.log(res))
// new Promise((resolve) => resolve('哈哈')).then(res => console.log(res))
//
// Promise.reject('reject').catch(err => console.log(err) )
// new Promise((_, reject) => reject('reject')).catch(err => console.log(err))

// const p1 = mockQueryData(1000,1)
// const p2 = mockQueryData(2000,2)
// const p3 = mockQueryData(3000,3)

//Promise.all 只要有一个promise reject 新的promise就reject
// Promise.all([p1,p2,p3]).then(([res1,res2,res3]) =>{
//   console.log(res1,res2,res3)
// }).catch(err =>{
//   console.log(err)
// })


//Promise.allSettled 一定会返回最终状态
const p1 = mockQueryData(1000,1)
const p2 = mockQueryData(500,2,false)
const p3 = mockQueryData(3000,3)
// Promise.allSettled([p1,p2,p3]).then(([res1,res2,res3]) =>{
//   console.log(res1,res2,res3)
// }).catch(err =>{
//   console.log(err)
// })

//Promise.race promise 会随着第一个 promise 的敲定而敲定(无论是fulfilled, rejected)
// Promise.race([p1,p2,p3]) .then(res =>{
//   console.log(res)
// }).catch(err =>{
//   console.log(err)
// })


/**
 *  Promise.any 当任何一个promise状态是fulfilled时候，
 *  这个新的promise会兑现，所有的promise都被拒绝会返回拒绝原因数组
 */

Promise.any([p1,p2,p3]) .then(res =>{
  console.log(res)
}).catch(err =>{
  console.log(err)
})

const p4 = mockQueryData(1000,1,false)
const p5 = mockQueryData(500,2,false)
const p6 = mockQueryData(3000,3,false)


Promise.any([p4,p5,p6]) .then(res =>{
  console.log(res)
}).catch(err =>{
  console.log(err,'err')
})
